package dane;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

/**
 * Program <code>Music Store</code>
 * Klasa <code>Logowanie</code> sprawdza dane oraz loguje użytkownika do aplikacji
 * @version 1.0 2013
 * @author Dorota Chyła, Tomasz Bednarski, Wojciech Florkowski, Łukasz Gąsiewicz
 */
public class Logowanie {
	private String emailKlient = "", emailPracownik="";
    private String emailLogowany, hasloLogowany;
    private String imieD, nazwiskoD, ulicaD, miejscowoscD, kod_pocztowyD, telefonD, stanowiskoD;
	private String typ="";
	private int id;
	private static Logowanie unikalnaInstancja=null;
    
	/**
	 * Prywatny konstruktor bezparametrowy
	 */
	private Logowanie(){
	}
	
	/**
	 * Metoda udostępnia nam sposób stworzenia instancji obiektu klasy Konczace i zwraca go jako wynik działania tej metody
	 * @return
	 */
	public static Logowanie pobierzLogowanie(){
		if(unikalnaInstancja==null)
			unikalnaInstancja= new Logowanie();
		return unikalnaInstancja;
	}
	
	/**
	 * Metoda publiczna sprawdzająca istnienie podanego emaila w bazie danych
	 * @param email
	 * @return boolean
	 */
	public boolean czyIstniejeMail(String email){
		Connection c = null; 
			 
		// połączenie się bazą
		try {
			Class.forName("com.mysql.jdbc.Driver").newInstance();
			//?useUnicode=true&characterEncoding=UTF-8
			c=DriverManager.getConnection("jdbc:mysql://localhost/sklep", "root", "");//dane do MySQL
			System.out.println ("Logowanie: Udało się połączyć z bazą danych...");
			   
		} catch (ClassNotFoundException e) {
			System.err.println ("Logowanie: Problem z driverem bazy danych...");
		} catch (SQLException e) {
			System.err.println ("Logowanie: Nie można połączyć się z baza danych...");
		} catch (Exception e) {
			System.err.println ("Logowanie: Błąd przy połączeniu z bazą danych...");
		}
		
		try {
			Statement st=c.createStatement();
			ResultSet rs=st.executeQuery("SELECT  id_klienta, imie, nazwisko, ulica, miejscowosc, kod_pocztowy, telefon, email, haslo FROM klienci WHERE email = '"+email+"'");
				      
			// pobieram dane z tabeli klienci, je�li nie istnieje wpisany mail
			// to nie pobierze nic i przechodzi do p�tli while ni�ej
			while (rs.next()) {
				id= rs.getInt("id_klienta");
				imieD= rs.getString("imie");
				nazwiskoD= rs.getString("nazwisko");
				ulicaD= rs.getString("ulica");
				miejscowoscD= rs.getString("miejscowosc");
				kod_pocztowyD= rs.getString("kod_pocztowy");
				telefonD= rs.getString("telefon");
				emailKlient= rs.getString("email");
				hasloLogowany= rs.getString("haslo");
			}
			    	
			rs.close();
			      
			ResultSet rs2=st.executeQuery("SELECT  imie, nazwisko, stanowisko, email, haslo FROM pracownicy WHERE email = '"+email+"'");
			      
			while (rs2.next()) {
			    	  
				imieD= rs2.getString("imie");
				nazwiskoD= rs2.getString("nazwisko");
				stanowiskoD= rs2.getString("stanowisko");
				emailPracownik= rs2.getString("email");
				hasloLogowany= rs2.getString("haslo");
			}
				      
			rs2.close();
		} catch (Exception e) { 
			System.err.println ("Logowanie: Błąd przy pobieraniu danych...");
		}
			    
		// zamykamy po��czenie (je�eli by�o otwarte)
		if (c != null) {
			try {
				c.close();
				System.out.println ("Logowanie: Połączenie z bazą danych zamknięte...");
			} catch (Exception e) { 
				System.err.println ("Logowanie: Błąd przy zamykaniu bazy danych...");
			}
		}
			    
		if(emailKlient.equals(email)) {
			System.out.println("Klient istnieje");
			emailLogowany = emailKlient;
			typ="Klient";
			return true;
		} else if(emailPracownik.equals(email)) {
			System.out.println("Pracownik istnieje");
			emailLogowany = emailPracownik;
			typ=stanowiskoD;
			return true;
		}else{
		return false;
		}
	}
	
	/**
	 * Metoda publiczna sprawdzająca czy podany email i hasło są równe tym z bazy danych
	 * @param emailPa podany przez użytkownika email
	 * @param hasloPa podane przez użytkownika hasło
	 * @return boolean, true jeśli są poprawne dane
	 */
	public boolean czySprawdzHaslo(String emailPa, String hasloPa) {
		if(czyIstniejeMail(emailPa)) {
			if(emailLogowany.equals(emailPa) && hasloLogowany.equals(hasloPa)) {
				return true;
			} 
		}
		return false;
	}
	
	/**
	 * Metoda sprawdzająca równość dwóch podanych haseł w formularzu
	 * @param cs hasło
	 * @param cs2 powtórzenie hasła
	 * @return boolean, true jeśli są równe
	 */
	public boolean czyHaslaRowne(String cs, String cs2) {
		  if(cs.equals(cs2)) {
		      return true;
		  } else {
			  return false;
		  }
	}
	
	/**
	 * Metoda zwracająca imie zalogowanej osoby
	 * @return String
	 */
	public String getImie(){
		return imieD;
	}
	/**
	 * Metoda zwracająca nazwisko zalogowanej osoby
	 * @return String
	 */
	public String getNazwisko(){
		return nazwiskoD;
	}
	/**
	 * Metoda zwracająca stanowisko zalogowanej osoby
	 * @return String
	 */
	public String getTyp(){
		return typ;
	}
	/**
	 * Metoda zwracająca email zalogowanej osoby
	 * @return String
	 */
	public String getEmail(){
		return emailLogowany;
	}
	/**
	 * Metoda zwracająca ulice zamieszkania zalogowanej osoby
	 * @return String
	 */
	public String getUlica(){
		return ulicaD;
	}	
	/**
	 * Metoda zwracająca miejscowość zamieszkania zalogowanej osoby
	 * @return String
	 */
	public String getMiejscowosc(){
		return miejscowoscD;
	}	
	/**
	 * Metoda zwracająca kod pocztowy zalogowanej osoby
	 * @return String
	 */
	public String getKodPocztowy(){
		return kod_pocztowyD;
	}	
	/**
	 * Metoda zwracająca telefon zalogowanej osoby
	 * @return String
	 */
	public String getTelefon(){
		return telefonD;
	}	
	/**
	 * Metoda zwracająca ID zalogowanej osoby
	 * @return String
	 */
	public int getId(){
		return id;
	}
}
